Модуль:3D viewer advanced
local p = {} local utils = require('Module:Utils') local HtmlBuilder = require('Module:HtmlBuilder') function p.viewer(frame) local args = utils.get_args(frame) local startframe = utils.processArg(args'startframe') local image = utils.processArg(args'image') local image_0 = utils.processArg(args'image-0') local fallback = utils.processArg(args'fallback') local startframe_class if startframe ~= '' then startframe_class = mw.text.trim(startframe) else startframe_class = utils.expandWikitext(' ') end local output_view = HtmlBuilder.create('div') .addClass('viewer-3d') .addClass('startframe-' .. startframe_class) .wikitext(fallback) for i = 0,10 do local image_n = utils.processArg(args.. i, '') if image_n ~= '' then span_image_url_n = output_view .tag('span') .addClass('viewer-3d-url-' .. i) .wikitext(utils.expandWikitext(' ')) span_image_map_n = output_view .tag('span') .addClass('viewer-3d-map-' .. i) .wikitext(utils.expandWikitext(' ')) end end local viewer_3d_frame = output_view .tag('div') .addClass('viewer-3d-frame') local switch_to_2d = output_view .tag('div') .attr('id', 'switch-to-2d') return tostring(output_view) end function p.viewer_new(frame) local args = utils.get_args(frame) -- button classes mapping local button_classes = { red = 'view-selector-red', blu = 'view-selector-blu', australium_half = 'view-selector-australium-', australium_full = 'view-selector-australium-full', australium = 'view-selector-australium-full', default_half = 'view-selector-default-', default_full = 'view-selector-default-full', default = 'view-selector-default-full' } -- create output container local output_view = HtmlBuilder.create('div') .addClass('viewer-3d-container') -- create container for viewer local startimage = utils.processArg(args'3d-image-1') -- if first button is colored then add RED to filename if utils.processArg(args'3d-button-1') 'colored_pair' then startimage = startimage .. ' RED' end local startframe = args'3d-startframe' or utils.expandWikitext(' ') local viewer_container = output_view .tag('div') .addClass('viewer-3d') .addClass('startframe-' .. startframe) -- add 3D and 2D selectors local viewer_3d_frame = viewer_container .tag('div') .addClass('viewer-3d-frame') local switch_to_2d = viewer_container .tag('div') .attr('id', 'switch-to-2d') -- create container for model selector buttons local buttons_container = output_view .tag('ul') .addClass('buttons-container-3d') -- create container for 2D image local image_2d if args'image' then image_2d = args'image' elseif args'team-colors' 'yes' then image_2d = args'skin-image-red' or mw.title.getCurrentTitle().baseText .. ' RED.png' else image_2d = mw.title.getCurrentTitle().baseText .. '.png' end local viewer_2d_frame = output_view .tag('div') .wikitext(utils.expandWikitext(' ')) -- row button counter for half width buttons local current_row_count = 0 local colored = false local i = 1 while utils.processArg(args.. i) ~= '' or colored do -- the "or colored" ensures that if the last image pair is team-colored, it will still be processed. local image_postfix = ' 3D.jpg' local viewname_postfix = '' if colored then -- if we are the second half of a team-colored image, use the details from the first half. i = i - 1 end local image_n = utils.processArg(args.. i) local button_n = utils.processArg(args.. i) local button_class = button_classesbutton_n local viewname_n = utils.processArg(args.. i) if colored then i = i + 1 image_postfix = ' BLU 3D.jpg' viewname_postfix = ' (BLU) ' button_class = 'view-selector-blu' colored = false elseif not colored and button_n 'colored_pair' then image_postfix = ' RED 3D.jpg' viewname_postfix = ' (RED)' button_class = 'view-selector-red' colored = true end if image_n ~= '' then span_image_url_n = viewer_container .tag('span') .addClass('viewer-3d-url-' .. (i-1)) .wikitext(utils.expandWikitext(' ')) span_image_map_n = viewer_container .tag('span') .addClass('viewer-3d-map-' .. (i-1)) .wikitext(utils.expandWikitext(' ')) -- if there is only one 3d image then don't attach selector if i 1 and args'3d-image-2' nil and args'3d-image-3' nil then break end -- add selector button for this model if button_n 'default_half' or button_n 'australium_half' then if current_row_count 0 then button_class = button_class .. 'left' current_row_count = 1 else button_class = button_class .. 'right' current_row_count = 0 end end -- selector is 0-indexed button_class = button_class .. ' selector-' .. (i-1) li_button_n = buttons_container .tag('li') .addClass(button_class) .wikitext(utils.expandWikitext('' .. viewname_n .. viewname_postfix .. '')) end i = i + 1 end return tostring(output_view) end return p